Android Permissions Model এবং Runtime Permissions
Android এর Permissions Model ব্যবহারকারীর গোপনীয়তা এবং নিরাপত্তা রক্ষা করতে ডেভেলপারদের অ্যাপ্লিকেশন তৈরি করার সময় নির্দিষ্ট ফিচার বা সংবেদনশীল তথ্যের অ্যাক্সেসের জন্য অনুমতি চাওয়ার সুযোগ দেয়। Android এর Permissions Model দুটি ধাপে বিভক্ত:
- Install-time Permissions: Android 6.0 (API Level 23) এর আগে অ্যাপ ইনস্টল করার সময়ই সমস্ত পারমিশন গ্রান্ট করার প্রক্রিয়া।
- Runtime Permissions: Android 6.0 থেকে শুরু করে অ্যাপ ইনস্টল করার সময় নয়, বরং যখন অ্যাপ প্রথমবারের মতো সংবেদনশীল পারমিশন ব্যবহার করতে চায় তখন ইউজারের কাছ থেকে অনুমতি চাওয়া হয়।
Install-time Permissions
- Android 6.0 এর আগে, অ্যাপ ইনস্টল করার সময় অ্যাপের প্রয়োজনীয় সব পারমিশন একবারে ইউজারের কাছে প্রদর্শিত হতো।
- ইউজার যদি অনুমতি গ্রহণ করতেন, তাহলে অ্যাপটি ইনস্টল হতো। ইউজার তখন সমস্ত পারমিশন অনুমোদন করতেন বা সম্পূর্ণ অ্যাপ ইনস্টল প্রক্রিয়া বাতিল করতেন।
এই মডেলটি ইউজারের কাছে সংবেদনশীল তথ্য ব্যবহারের সময় সরাসরি নিয়ন্ত্রণ প্রদান করত না, তাই Android 6.0 থেকে Runtime Permissions চালু করা হয়েছে।
Runtime Permissions
Android 6.0 থেকে Runtime Permissions চালু করা হয়েছে, যাতে সংবেদনশীল পারমিশনের জন্য ইউজারকে ইনস্টলেশনের সময় নয়, বরং যখন অ্যাপ্লিকেশনটি প্রথমবার সেই পারমিশন ব্যবহার করতে চায় তখন অনুমতি চাওয়া হয়। এটি ইউজারের গোপনীয়তা এবং নিরাপত্তা আরও উন্নত করে। সংবেদনশীল পারমিশনগুলির মধ্যে রয়েছে:
- CAMERA: ক্যামেরা অ্যাক্সেস করতে।
- LOCATION: ব্যবহারকারীর লোকেশন অ্যাক্সেস করতে।
- CONTACTS: কন্ট্যাক্ট অ্যাক্সেস করতে।
- STORAGE: ডিভাইসের স্টোরেজ অ্যাক্সেস করতে।
- MICROPHONE: মাইক্রোফোন অ্যাক্সেস করতে।
Runtime Permissions এর ব্যবহারের উদাহরণ
নিচে একটি সিম্পল উদাহরণ দেওয়া হলো যেখানে ক্যামেরা অ্যাক্সেস করার জন্য ইউজারের কাছ থেকে Runtime Permission চাওয়া হয়েছে।
ধাপ ১: Manifest ফাইলে Permission যোগ করা
AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA"/>
ধাপ ২: Activity তে Runtime Permission চেক করা
Activity তে Runtime Permission চেক করা এবং Permission না থাকলে ইউজারের কাছ থেকে অনুমতি চাওয়া।
MainActivity.java:
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public class MainActivity extends AppCompatActivity {
private static final int CAMERA_PERMISSION_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonRequest = findViewById(R.id.buttonRequest);
buttonRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkCameraPermission();
}
});
}
// ক্যামেরা পারমিশন চেক করা
private void checkCameraPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// যদি পারমিশন না পাওয়া যায়, তাহলে পারমিশন রিকোয়েস্ট করা
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
} else {
// পারমিশন আগে থেকেই থাকলে ক্যামেরা ব্যবহার করা
Toast.makeText(this, "Camera permission already granted", Toast.LENGTH_SHORT).show();
}
}
// পারমিশনের ফলাফল হ্যান্ডেল করা
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Camera permission granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();
}
}
}
}
কোডের ব্যাখ্যা:
- checkCameraPermission(): ক্যামেরার পারমিশন চেক করে। যদি পারমিশন আগে থেকেই অনুমোদিত হয়, তাহলে এটি ক্যামেরা ব্যবহার করতে দেয়, আর যদি না হয়, তাহলে পারমিশন রিকোয়েস্ট করা হয়।
- onRequestPermissionsResult(): ইউজার পারমিশন গ্রহণ বা প্রত্যাখ্যান করলে এই মেথডটি কল হয়। এখানে পারমিশনের ফলাফল হ্যান্ডেল করা হয়।
ধাপ ৩: Layout তৈরি করা
activity_main.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/buttonRequest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Request Camera Permission"/>
</LinearLayout>
Best Practices for Runtime Permissions
- Permission Explanation: পারমিশন রিকোয়েস্ট করার আগে ইউজারকে কারণ ব্যাখ্যা করা উচিত। এটি ইউজারদের পারমিশন গ্রহণের সম্ভাবনা বাড়িয়ে দেয়।
- Sensitive Permissions Only When Needed: সংবেদনশীল পারমিশনগুলো ইনস্টলেশনের সময় না চেয়ে যখন সত্যিই প্রয়োজন, তখন চাওয়া উচিত।
- Handle Denial Gracefully: যদি ইউজার পারমিশন প্রত্যাখ্যান করেন, তাহলে ইউজারকে বিকল্প সলিউশন বা একটি সমাধান দেওয়া উচিত।
- Check Permissions Before Use: কোনো পারমিশন ব্যবহার করার আগে তা চেক করে নেওয়া উচিত এবং পারমিশন না থাকলে পারমিশন রিকোয়েস্ট করা উচিত।
- Multiple Permissions Request: একাধিক পারমিশন একসঙ্গে রিকোয়েস্ট করার সময় যত্নবান হতে হবে এবং নিশ্চিত করতে হবে, সব পারমিশনের ফলাফল সঠিকভাবে হ্যান্ডেল হচ্ছে।
Permissions এর ধরন
Android Permissions মূলত তিন প্রকার:
- Normal Permissions:
- কম ঝুঁকিপূর্ণ, যেমন ইন্টারনেট অ্যাক্সেস। এই পারমিশনগুলো ইনস্টলেশনের সময় স্বয়ংক্রিয়ভাবে দেওয়া হয়।
- Dangerous Permissions:
- সংবেদনশীল তথ্যের অ্যাক্সেসের জন্য, যেমন ক্যামেরা, লোকেশন, কন্ট্যাক্টস। এগুলো Runtime এ ইউজারের কাছ থেকে গ্রহণ করতে হয়।
- Special Permissions:
- সিস্টেমের ওপর প্রভাব ফেলতে পারে, যেমন SYSTEM_ALERT_WINDOW, যা Overlay permission এর মতো। এই পারমিশনগুলো নিতে হলে ইউজারকে স্পেশাল সেটিংস পেজে নিয়ে যেতে হয়।
উপসংহার
Android এর Permissions Model এবং Runtime Permissions ব্যবহারকারীর গোপনীয়তা এবং নিরাপত্তা রক্ষায় গুরুত্বপূর্ণ ভূমিকা পালন করে। Runtime Permissions ডেভেলপারদের অ্যাপ্লিকেশনকে আরও নিরাপদ এবং ব্যবহারবান্ধব করে। এটি সংবেদনশীল তথ্য এবং ফিচারের জন্য পারমিশন তখনই চায় যখন সত্যিই প্রয়োজন, যার ফলে ইউজারদের কনফিডেন্স বাড়ে এবং গোপনীয়তা বজায় থাকে। Proper Best Practices অনুসরণ করলে Android অ্যাপ্লিকেশনটি নিরাপদ এবং ইউজার ফ্রেন্ডলি হয়।
Read more